package flag

import (
	"fmt"
	"gin_study_blog/common"
	"gin_study_blog/common/blog_type"
	"gin_study_blog/models"
	"gin_study_blog/utils"
)

func CreateUser(permissions string) {
	// 创建用户逻辑
	// 用户名 昵称 密码 确认密码 邮箱
	var (
		userName   string
		nickName   string
		password   string
		rePassword string
		email      string
	)
	// 使用 scanner 方式测试用户输入
	fmt.Printf("请输入用户名: ")
	fmt.Scan(&userName)
	fmt.Printf("请输入昵称: ")
	fmt.Scan(&nickName)
	fmt.Printf("请输入密码: ")
	fmt.Scan(&password)
	fmt.Printf("请再次输入密码: ")
	fmt.Scan(&rePassword)
	// 问题 fmt.Scanln() 会直接跳过,除非放在第一行
	fmt.Printf("请输入邮箱: ")
	fmt.Scan(&email)

	// 判断用户是否存在
	userModel := new(models.UserModel)
	err := common.DB.Take(&userModel, "user_name = ?", userName).Error
	if err == nil {
		// 存在
		common.Log.Error("用户名已存在")
		return
	}
	// 校验两次密码
	if password != rePassword {
		common.Log.Error("两次密码不一致, 请重新输入")
		return
	}
	// 对密码进行 hash 加密
	pwd, err := utils.HashPwd(password)
	if err != nil {
		common.Log.Error(err.Error())
		return
	}
	// 头像处理 1.默认头像 2.随即头像
	avatar := "/uploads/avatar/default.png"

	role := blog_type.PermissionUser
	if permissions == "admin" {
		role = blog_type.PermissionAdmin
	}
	// 入库
	err = common.DB.Create(&models.UserModel{
		NickName:   nickName,
		UserName:   userName,
		Password:   pwd,
		Avatar:     avatar,
		Email:      email,
		Role:       role,
		Ip:         "127.0.0.1",
		Addr:       "内网地址",
		SignStatus: blog_type.LoginTypeEmail,
	}).Error
	if err != nil {
		common.Log.Error("用户添加失败")
		return
	}
	common.Log.Infof("添加成功")
}
